--[[
福利业务逻辑模块
功能：处理福利业务，包括签到、宝箱、收益日报等
返回值：true表示成功，false表示失败
--]]

-- 导入依赖
local node_config = require("node_config")

-- 处理福利宝箱
local function 功能_福利开宝箱()
    _G.调试输出("开始处理宝箱")
    
    -- 查找并点击宝箱按钮
    if _G.中心找节点(node_config.宝箱按钮, true) then
        sleep(2000)  -- 等待宝箱界面加载
        
        -- 点击开宝箱按钮
        if _G.中心找节点(node_config.开宝箱按钮, true) then
            _G.调试输出("点击开宝箱")
            sleep(3000)  -- 等待动画和广告按钮出现
            
            -- 检查是否有看广告得金币的选项
            if _G.中心找节点(node_config.看广告得金币, true) then
                _G.调试输出("观看广告得金币")
                sleep(35000)  -- 等待广告播放（通常30秒）
                
                -- 尝试关闭广告
                for i = 1, 3 do
                    if _G.中心找节点(node_config.返回按钮, true) then
                        sleep(1000)
                    end
                end
            end
        end
        
        -- 返回主界面
        for i = 1, 3 do
            if _G.中心找节点(node_config.返回按钮, true) then
                sleep(1000)
            else
                break
            end
        end
        
        return true
    else
        _G.调试输出("未找到宝箱按钮")
        return false
    end
end

-- 处理收益日报
local function 功能_福利收益日报()
    _G.调试输出("开始处理收益日报")
    
    -- 查找并点击收益日报按钮
    if _G.中心找节点(node_config.收益日报按钮, true) then
        sleep(2000)  -- 等待界面加载
        
        -- 查找并点击立即领取按钮
        if _G.中心找节点(node_config.立即领取按钮, true) then
            _G.调试输出("领取收益日报奖励成功")
            sleep(2000)  -- 等待领取动画
            
            -- 可能需要关闭弹窗，尝试点击返回
            if _G.中心找节点(node_config.返回按钮, true) then
                sleep(1000)
            end
        else
            _G.调试输出("未找到立即领取按钮")
        end
        
        return true
    else
        _G.调试输出("未找到收益日报按钮")
        return false
    end
end

-- 福利业务逻辑
local function 功能_福利业务逻辑()
    _G.调试输出("开始处理福利业务")
    
    -- 使用计数变量跟踪尝试次数
    local 尝试次数 = 0
    local 最大尝试次数 = 1
    
    -- 1. 先确保回到首页
    _G.调试输出("确保回到首页")
    while 尝试次数 < 最大尝试次数 do
        -- 尝试查找首页选项卡，如果找到则点击
        if _G.中心找节点(node_config.首页选项卡, true) then
            _G.调试输出("成功回到首页")
            sleep(2000)  -- 等待界面加载
            break
        end
        
        -- 如果找不到首页选项卡，尝试返回操作
        _G.调试输出("尝试返回操作")
        if _G.中心找节点(node_config.返回按钮, true) then
            sleep(1500)
        else
            -- 如果连返回按钮都找不到，可能卡在特殊界面
            _G.调试输出("无法找到返回按钮，尝试按返回键")
            keypress(4)  -- Android返回键
            sleep(1500)
        end
        
        尝试次数 = 尝试次数 + 1
    end
    
    if 尝试次数 >= 最大尝试次数 then
        _G.调试输出("无法返回首页，放弃福利处理")
        return false
    end
    
    -- 2. 处理宝箱
    _G.调试输出("开始处理宝箱")
    local 宝箱结果 = 功能_福利开宝箱()
    sleep(2000)
    
    -- 再次确保在首页
    _G.中心找节点(node_config.首页, true)
    sleep(2000)
    
    -- 3. 处理收益日报
    _G.调试输出("开始处理收益日报")
    local 收益日报结果 = 功能_福利收益日报()
    sleep(2000)
    
    -- 再次确保在首页
    _G.中心找节点(node_config.首页选项卡, true)
    sleep(2000)
    
    -- 4. 处理福利页面
    _G.调试输出("开始处理福利页面")
    local 福利处理成功 = false
    
    -- 尝试点击福利按钮
    if node_config.福利选项卡 and _G.中心找节点(node_config.福利选项卡, true) then
        _G.调试输出("成功切换到福利选项卡")
        sleep(2500)  -- 等待福利界面加载
        福利处理成功 = true
    elseif node_config.福利按钮 and _G.中心找节点(node_config.福利按钮, true) then
        _G.调试输出("成功点击福利按钮")
        sleep(2500)  -- 等待福利界面加载
        福利处理成功 = true
    else
        _G.调试输出("未找到福利入口")
        return false
    end
    
    if 福利处理成功 then
        -- 处理每日签到
        if node_config.签到按钮 and _G.中心找节点(node_config.签到按钮, true) then
            _G.调试输出("完成每日签到")
            sleep(1500)
        else
            _G.调试输出("未找到签到按钮或已签到")
        end
        
        -- 处理可领取的福利
        local 领取计数 = 0
        local 连续失败计数 = 0
        
        -- 循环处理所有可领取福利，直到找不到更多福利或达到最大尝试次数
        while 连续失败计数 < 3 and 领取计数 < 10 do
            if node_config.可领取福利 and _G.中心找节点(node_config.可领取福利, true) then
                _G.调试输出("领取福利成功")
                领取计数 = 领取计数 + 1
                连续失败计数 = 0  -- 重置失败计数
                sleep(1500)
            else
                连续失败计数 = 连续失败计数 + 1
                sleep(1000)
            end
        end
        
        _G.调试输出("本次共领取 " .. 领取计数 .. " 个福利")
        
        -- 返回首页
        _G.调试输出("返回首页")
        尝试次数 = 0
        while 尝试次数 < 最大尝试次数 do
            if _G.中心找节点(node_config.首页, true) then
                _G.调试输出("成功返回首页")
                sleep(2000)
                break
            end
            
            if _G.中心找节点(node_config.返回按钮, true) then
                sleep(1500)
            else
                keypress(4)  -- Android返回键
                sleep(1500)
            end
            
            尝试次数 = 尝试次数 + 1
        end

        -- 返回首页
        _G.调试输出("返回首页")
        尝试次数 = 0
        while 尝试次数 < 最大尝试次数 do
            if _G.中心找节点(node_config.首页选项卡, true) then
                _G.调试输出("成功返回首页")
                sleep(2000)
                break
            end
            
            if _G.中心找节点(node_config.返回按钮, true) then
                sleep(1500)
            else
                keypress(4)  -- Android返回键
                sleep(1500)
            end
            
            尝试次数 = 尝试次数 + 1
        end
        
        return true
    end
    
    return false
end

return 功能_福利业务逻辑 